//
//  TransitionAnimation.h
//  BaseCode
//
//  Created by 曹连华 on 2019/7/3.
//  Copyright © 2019 曹连华. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "AnimationDelegate.h" //当 使用CAAnimation 子类动画时 可以设置AnimationDelegate 为动画代理

NS_ASSUME_NONNULL_BEGIN

typedef NS_ENUM(NSInteger,TransitionType) {
    TransitionTypePush = 0,
    TransitionTypePop,
    TransitionTypePresent,
    TransitionTypeDismissed,
};

@interface TransitionAnimation : NSObject <UIViewControllerAnimatedTransitioning>

@property (nonatomic, assign) TransitionType transitionType;

/**
 * 转场动画时间 子类可重写
 */
- (NSTimeInterval)transitionAnimationDuration;

/**
 * 导航 push / pop 转场动画
 * 子类可重写该 函数  自定义转场动画
 */
- (void)push_pop_animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext;

/**
 * present / dismissed 转场动画
 * 子类可重写该 函数  自定义转场动画
 */
- (void)present_dismissed_animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext;

/**
 * 创建一个基础动画
 */
- (CABasicAnimation *)transitionBasicAnimationPath:(NSString *)keyPath;

/**
 * 创建一个关键帧 动画
 */
- (CAKeyframeAnimation *)transitionKeyframeAnimationPath:(NSString *)keyPath;

/**
 * 创建一个弹性 动画
 */
- (CASpringAnimation *)transitionSpringAnimationPath:(NSString *)keyPath API_AVAILABLE(ios(9.0));

/**
 * 创建动画组
 */
- (CAAnimationGroup *)transitionGroupAnimation;

#pragma mark - keyPath 参数介绍
/**
 * transform.rotation     :旋转动画（默认绕Z轴）
 * transform.rotation.x   :绕X轴旋转动画
 * transform.rotation.y   :绕Y轴旋转动画
 * transform.rotation.z   :绕Z轴旋转动画
 
 * transform.scale        :缩放动画（默认以Z轴为中心缩放）
 * transform.scale.x      :缩放动画 以X轴为中心
 * transform.scale.y      :缩放动画 以Y轴为中心
 * transform.scale.z      :缩放动画 以Z轴为中心
 
 * transform.translation   :移动动画
 * transform.translation.x :移动动画 X轴方向移动
 * transform.translation.y :移动动画 Y轴方向移动
 * transform.translation.z :移动动画 Z轴方向移动
 
 * position                :平移动画
 * position.x              :平移动画 X轴方向平移
 * position.y              :平移动画 Y轴方向平移
 * position.z              :平移动画 Z轴方向平移
 
 * bounds.size             :改变大小动画
 * bounds.size.width       :改变宽度动画
 * bounds.size.height      :改变高度动画
 * bounds.origin.x         :改变X坐标动画
 * bounds.origin.y         :改变Y坐标动画
 
 * opacity                 :透明度动画
 * backgroundColor         :背景色动画
 * cornerRadius            :圆角动画
 * borderWidth             :边框动画
 * shadowColor             :阴影颜色动画
 * shadowOffset            :阴影偏移量动画
 * shadowOpacity           :阴影透明度动画
 * shadowRadius            :阴影圆角动画
 */
@end

NS_ASSUME_NONNULL_END
